<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>
<script>
//    多个一维数组合并
//    concat方法
//   concatArr();
//    push方法
//    pushArr();
//    reduce或reduceRight方法
//    reduceArr();
function concatArr() {
    var arr1=[1,2];
    var arr2=[3,4];
    var arr=arr1.concat(arr2);
    console.log(arr);
}
function pushArr() {
    var arr1=[1,2];
    var arr2=[3,4];
    for(var i=0;i<arr2.length;i++){
        arr1.push(arr2[i]);
    }
    console.log(arr1);
}
function reduceArr() {
    var arr1=[1,2];
    var arr2=[3,4];
    var arr=arr2.reduce(function (prev,curr) {
        prev.push(curr);
        return prev
    },arr1);
    console.log(arr);
}

//多维数组合并成一维数组

//concat方法
//applyArr2([[1, 2], [3, 4, 5], [6, 7, 8, 9], [11,12,[12,13,[14]]], 10, 11]);
//apply方法
//concatArr2([[1, 2], [3, 4, 5], [6, 7, 8, 9], [11,12,[12,13,[14]]], 10, 11]);
//使用join()和split()方法
//joinArr([[1, 2], [3, 4, 5], [6, 7, 8, 9], [11,12,[12,13,[14]]], 10, 11]);
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10, 11]
function concatArr2(arr) {
    var result=[];
    for(var i=0;i<arr.length;i++){
//        console.log(arr[i].constructor);
        result=result.concat(arr[i]);
    }

    for(var i=0;i<result.length;i++){
        if(result[i].constructor==Array){
            concatArr2(result);
            return;
        }
    }
    console.log(result);
}
function applyArr2(arr) {
    //省略对二维以上数组的判断
    console.log(Array.prototype.concat.apply([], arr));
}
function joinArr(arr) {
    console.log(arr.join(',').split(','));
}


//数组去重

//双重循环去重法
//unique([1, 2, 3, 4, 3, 2, 'a', 'b', 'a']);
//forEach()和indexOf()方法
//unique2([1, 2, 3, 4, 3, 2, 'a', 'b', 'a']);
//排序遍历去重
//unique3([1, 2, 3, 4, 3, 2, 'a', 'b', 'a']);
//对象键值对法（不太理解）
//unique4([1, 2, 3, 4, 3, 2, 'a', 'b', 'a']);
//ES6中set和map方法
//unique5([1, 2, 3, 4, 3, 2, 'a', 'b', 'a']);
function unique(arr) {
    var result=[arr[0]];
    for(var i=1;i<arr.length;i++){
        var repeat=false;
        for(var j=0;j<result.length;j++){
            if(result[j]==arr[i]){
                repeat=true;
            }
        }
        if(!repeat){
            result.push(arr[i]);
        }
    }
    console.log(result);
}
function unique2(arr) {
    var result=[];
    arr.forEach(function (v) {
        if(result.indexOf(v)==-1){
            result.push(v);
        }
    });
    console.log(result);
}
function unique3(arr) {
    arr.sort();
    var result=[arr[0]];
    for(var i=1;i<arr.length;i++){
        if(arr[i]!==result[result.length-1]){
            result.push(arr[i]);
        }
    }
    console.log(result);
}

function unique4(arr) {
    var result = [];
    var object = {};
    for (var i = 0; i< arr.length; i++) {
        if (!object[typeof(arr[i]) + arr[i]]) {  //键名里加入typeof(arr[i])是为了区别不同类型的值，如1和`1`
            result.push(arr[i]);
            object[typeof(arr[i]) + arr[i]] = 1
        }
    }
    console.log(result);
}
function unique5(arr) {
    var s = new Set();
    arr.map(x=>s.add(x));
    for(let i of s){
        console.log(i);
    }
}

//数组随机排序
//递归的方法
    randomSort([1, 2, 3, 4, 5, 6, 7]);
function randomSort(arr,newArr) {
    var newArr=newArr || [];
    if(arr.length==1){
        newArr.push(arr[0]);
        return newArr;
    }
    var random=Math.ceil(Math.random()*arr.length)-1;
    newArr.push(arr[random]);
    arr.splice(random,1);//splice:删除数组元素，参数（元素位置，删除元素个数，添加的元素）
    return randomSort(arr,newArr);
}
Array.prototype


</script>